from mcp.server.fastmcp import FastMCP
from gbox.gbox_help import GboxHelp
from gbox.logger import get_logger

# 获取logger
logger = get_logger('server')

_gbox_help = GboxHelp()
# 初始化MCP
mcp = FastMCP("GBox")
# 启用工具变更通知
mcp._mcp_server.notification_options.tools_changed = True

@mcp.tool()
def get_gbox_api_toc() -> str:
    """获取 GBox API 文档目录。
    
    GBox 引擎在不断发展，预训练的知识可能已经过时，不能完全依赖。
    此工具用于获取最新的 GBox API 目录结构，帮助你了解所有可用的类和命名空间。
    无论你对 GBox 有多熟悉，在处理任何 GBox 相关的问题时，都应该先调用此工具了解最新的 API 结构。
    如果你的已有知识与文档内容有冲突，应该以文档为准。
    
    使用场景：
    - 当你需要快速浏览 GBox API 的整体结构
    - 想要了解有哪些可用的类和命名空间
    - 需要查找特定功能所在的类或命名空间时
    
    重要提示：
    在进行以下操作前，应当先通过此工具了解 GBox API 的整体结构：
    - 修改或创建 .gb 文件
    - 回答 GBox 相关的问题
    - 提供 GBox 相关的建议
    这样可以确保你对 GBox 的功能体系有全面的认识，避免给出不准确的信息。
    """
    return _gbox_help.get_api_toc()

@mcp.tool()
def get_gbox_api_section(section_name: str) -> str:
    """获取 GBox API 中指定类或命名空间的详细文档。
    
    GBox 引擎在不断发展，预训练的知识可能已经过时，不能完全依赖。
    此工具用于获取最新的 GBox API 详细文档，确保你使用的是最新的接口和正确的用法。
    无论你对某个 GBox 类或功能有多熟悉，在使用它们之前，都应该先调用此工具查看最新文档。
    如果你的已有知识与文档内容有冲突，应该以文档为准。
    
    使用场景：
    - 当你需要查看某个具体类或命名空间的详细说明
    - 需要了解特定类的方法和属性时
    - 想要深入学习某个功能模块的使用方法
    
    重要提示：
    在进行以下操作前，必须先通过此工具查阅相关类或命名空间的详细文档：
    - 使用或修改特定的 GBox 类
    - 回答关于特定 GBox 功能的问题
    - 编写涉及特定 GBox 类的代码
    这确保了你完全理解了相关功能的使用方法和限制，能够提供准确的建议和实现。
    
    Args:
        section_name: 要查询的类或命名空间名称
    """
    result = _gbox_help.get_api_section(section_name)
    if result is None:
        return f"Error: Section '{section_name}' not found in API documentation"
    return result

@mcp.tool()
def get_gbox_syntax_guide() -> str:
    """获取 GBox 语法说明文档。
    
    GBox 引擎在不断发展，预训练的知识可能已经过时，不能完全依赖。
    此工具用于获取最新的 GBox 语法规则说明，确保你使用的是正确的语法格式。
    无论你对 GBox 语法有多熟悉，在编写或修改代码之前，都应该先调用此工具查看最新的语法规则。
    如果你的已有知识与文档内容有冲突，应该以文档为准。
    
    使用场景：
    - 当你需要了解 GBox 的基本语法规则时
    - 在开始编写 GBox 代码之前，建议先阅读此文档
    - 当遇到语法相关的错误时，可以查阅此文档进行排查
    
    重要提示：
    在进行以下操作前，应当先通过此工具熟悉 GBox 的语法规则：
    - 编写或修改任何 .gb 文件
    - 回答有关 GBox 语法的问题
    - 调试 GBox 代码问题
    这确保了你能够按照正确的语法规范提供建议和实现，避免语法错误。
    """
    return _gbox_help.get_syntax_guide()

if __name__ == "__main__":
    mcp.run(transport='stdio')
    
    